package com.递归;

/**
 * 给定一个字符串，你需要反转字符串中每个单词的字符顺序，同时仍保留空格和单词的初始顺序。
 *
 * 示例 1:
 *
 * 输入: "Let's take LeetCode contest"
 * 输出: "s'teL ekat edoCteeL tsetnoc" 
 * 注意：在字符串中，每个单词由单个空格分隔，并且字符串中不会有任何额外的空格。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/reverse-words-in-a-string-iii
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class 反转字符串中的单词3 {
    static class Solution {
        /**
         * 1.按照空格拆分成数组，再遍历反转
         * @param s
         * @return
         */
        public String reverseWords(String s) {
            //按空格拆分字符串
            String[] word = s.split(" ");
            StringBuilder builder = new StringBuilder();
            for( int x = 0 ;x<word.length;x++){
                //将单词再转换成字符型数组
                char[] chars = word[x].toCharArray();
                //反转单词 首尾交换
                for(int i = 0,j=chars.length-1;i<j;i++,j--){
                    //首字符
                    char head = chars[i];
                    chars[i] = chars[j];
                    chars[j] = head;
                }
                //拼音单词
                for(char c:chars){
                    builder.append(c);
                }
                //加上空格 当只有一个和最后一个不加 空格
                if(x != word.length -1){
                    builder.append(" ");
                }
            }

            return builder.toString();

        }


    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        String  s = "i love you";
        System.out.println(solution.reverseWords(s));

    }
}
